home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1995 August / PC Plus Super CD (Issue 106) (PCP106) (August 1995).iso / pcplus / handson / wilf / abscall2.bas next >
Encoding:
BASIC Source File  |  1995-07-31  |  3.6 KB  |  223 lines

  1. DECLARE SUB BasicInt (IntType AS INTEGER)
  2. '
  3. ' Demonstration of using Interrupts via QBasic
  4. '
  5. TYPE REGISTERS
  6.  AX AS INTEGER
  7.  BX AS INTEGER
  8.  CX AS INTEGER
  9.  DX AS INTEGER
  10.  DS AS INTEGER
  11.  SI AS INTEGER
  12.  ES AS INTEGER
  13.  DI AS INTEGER
  14.  FL AS INTEGER
  15. END TYPE
  16. DIM SHARED REGS AS REGISTERS
  17.  
  18. '*************************************
  19. SCREEN 9
  20. COLOR 14, 1
  21. CLS
  22. LOCATE , 20
  23. PRINT "Loaded Services:"
  24. PRINT
  25.  
  26. '************************
  27. REGS.AX = &H1A00
  28. CALL BasicInt(&H2F)
  29.  
  30. IF (REGS.AX AND &HFF) = 0 THEN
  31.  NotThere% = 1
  32. ELSE
  33.  NotThere% = 0
  34. END IF
  35. GOSUB ListResult
  36. PRINT " ANSI.SYS"
  37.  
  38. '************************
  39. REGS.AX = &H4800
  40. CALL BasicInt(&H2F)
  41.  
  42. IF (REGS.AX AND &HFF) = 0 THEN
  43.  NotThere% = 1
  44. ELSE
  45.  NotThere% = 0
  46. END IF
  47. GOSUB ListResult
  48. PRINT " DOSKEY"
  49.  
  50. '************************
  51. REGS.AX = &HB00
  52. CALL BasicInt(&H2F)
  53.  
  54. IF (REGS.AX AND &HFF) = 0 THEN
  55.  NotThere% = 1
  56. ELSE
  57.  NotThere% = 0
  58. END IF
  59. GOSUB ListResult
  60. PRINT " GRAFTABL"
  61.  
  62. '************************
  63. REGS.AX = &H4300
  64. CALL BasicInt(&H2F)
  65.  
  66. IF (REGS.AX AND &HFF) = 0 THEN
  67.  NotThere% = 1
  68. ELSE
  69.  NotThere% = 0
  70. END IF
  71. GOSUB ListResult
  72. PRINT " HIMEM.SYS"
  73.  
  74. '************************
  75. REGS.AX = &H100
  76. CALL BasicInt(&H2F)
  77.  
  78. IF (REGS.AX AND &HFF) = 0 THEN
  79.  NotThere% = 1
  80. ELSE
  81.  NotThere% = 0
  82. END IF
  83. GOSUB ListResult
  84. PRINT " Print Queue"
  85.  
  86. '************************
  87. REGS.AX = &H1000
  88. CALL BasicInt(&H2F)
  89.  
  90. IF (REGS.AX AND &HFF) = 0 THEN
  91.  NotThere% = 1
  92. ELSE
  93.  NotThere% = 0
  94. END IF
  95. GOSUB ListResult
  96. PRINT " SHARE"
  97.  
  98. '************************
  99. REGS.AX = &H1500
  100. REGS.BX = 0
  101. CALL BasicInt(&H2F)
  102.  
  103. PRINT
  104. PRINT SPACE$(20); "Number of CD-roms you have :";
  105. COLOR 13
  106. PRINT REGS.BX
  107. COLOR 14
  108. IF REGS.BX THEN
  109.  PRINT SPACE$(20); "The first CD-rom unit is ";
  110.  COLOR 13
  111.  PRINT CHR$(ASC("A") + REGS.CX); ":"
  112.  PRINT
  113.  COLOR 14
  114.  REGS.AX = &H150B
  115.  REGS.BX = 0
  116.  CALL BasicInt(&H2F)
  117.  
  118.  IF REGS.BX = &HADAD THEN
  119.   NotThere% = 0
  120.  ELSE
  121.   NotThere% = 1
  122.  END IF
  123.  GOSUB ListResult
  124.  PRINT " MSCDEX"
  125. END IF
  126.  
  127. '************************
  128. REGS.AX = 0
  129. CALL BasicInt(&H33)
  130.  
  131. PRINT
  132. IF REGS.AX THEN
  133.  PRINT SPACE$(20); "You have a Mouse with"; REGS.BX; "buttons"
  134.  PRINT
  135.  
  136.  REGS.AX = 1
  137.  CALL BasicInt(&H33)
  138.                    
  139.  PRINT "    I will leave the Mouse cursor on until you press both buttons"
  140.  PRINT SPACE$(20); "Try moving it around!"
  141.  A = 1
  142.  WHILE A
  143.   REGS.AX = 3
  144.   CALL BasicInt(&H33)
  145.   LOCATE 1, 1
  146.   PRINT USING "####"; REGS.CX; REGS.DX;
  147.   LOCATE 23, 1
  148.   PRINT USING "####"; REGS.CX; REGS.DX;
  149.   LOCATE 1, 70
  150.   IF (REGS.BX AND 1) THEN PRINT "L";  ELSE PRINT " ";
  151.   LOCATE 1, 75
  152.   IF (REGS.BX AND 2) THEN PRINT "R";  ELSE PRINT " ";
  153.   IF (REGS.BX AND 3) = 3 THEN A = 0
  154.  WEND
  155.  REGS.AX = 2
  156.  CALL BasicInt(&H33)
  157.  
  158.  BEEP
  159. ELSE
  160.  PRINT SPACE$(20); "You don't have a mouse"
  161. END IF
  162.  
  163. COLOR 11
  164. LOCATE 22
  165. PRINT SPACE$(15); "(press any key or click to end program)"
  166.  
  167. ' wait for no key
  168. X$ = "X"
  169. WHILE LEN(X$)
  170.  X$ = INKEY$
  171. WEND
  172.  
  173. ' wait for no click
  174. A = 1
  175. WHILE A
  176.  REGS.AX = 3
  177.  CALL BasicInt(&H33)
  178.  A = (REGS.BX AND 3)
  179. WEND
  180.  
  181. ' wait for either key or click
  182.  
  183. WHILE LEN(X$) = 0
  184.  X$ = INKEY$
  185.  REGS.AX = 3
  186.  CALL BasicInt(&H33)
  187.  IF (REGS.BX AND 1) THEN X$ = "X"
  188. WEND
  189.  
  190. DEF SEG
  191. STOP
  192.  
  193. '************************
  194. ' Subroutine to list the result
  195. '
  196. ListResult:
  197.  LOCATE , 30
  198.  IF NotThere% THEN
  199.   COLOR 11
  200.   PRINT "x";
  201.  ELSE
  202.   COLOR 13
  203.   PRINT CHR$(251);
  204.  END IF
  205.  COLOR 14
  206.  RETURN
  207.  
  208. SUB BasicInt (IntType AS INTEGER) STATIC
  209.  
  210. DIM ASM%(54)
  211. DEF SEG = VARSEG(ASM%(0))
  212.  
  213. IF ASM%(1) = 0 THEN
  214.  BLOAD "BASICINT.OVL", VARPTR(ASM%(0))
  215. END IF
  216.  
  217. CALL ABSOLUTE(REGS, IntType, VARPTR(ASM%(0)))
  218.  
  219. DEF SEG
  220.  
  221. END SUB
  222.  
  223.